/**
 * 群组相关API接口
 */

import request from '../utils/request.js'

export const groupApi = {
  /**
   * 创建群组
   * @param {Object} data - 群组数据
   * @param {string} data.name - 群组名称
   * @param {string} data.description - 群组描述
   * @param {string} data.avatar - 群组头像
   * @param {Array} data.memberIds - 初始成员ID列表
   * @param {string} data.type - 群组类型（public/private）
   */
  createGroup(data) {
    return request.post('/user/groups', data)
  },

  /**
   * 获取我的群组列表
   * @param {Object} params - 查询参数
   * @param {string} params.type - 群组类型
   * @param {string} params.keyword - 搜索关键词
   */
  getMyGroups(params = {}) {
    // 自动附加当前登录用户ID
    try {
      const userInfo = uni.getStorageSync('userInfo')
      const userId = userInfo?.id || userInfo?.userId
      if (userId) {
        params = { ...params, userId }
      }
    } catch (e) {}
    return request.get('/user/groups/my', params)
  },

  /**
   * 搜索群组
   * @param {string} keyword - 搜索关键词
   * @param {Object} params - 其他参数
   */
  searchGroups(keyword, params = {}) {
    return request.get('/user/groups/search', { keyword, ...params })
  },

  /**
   * 获取群组详情
   * @param {string} groupId - 群组ID
   */
  getGroupDetail(groupId) {
    return request.get(`/user/groups/${groupId}`)
  },

  /**
   * 更新群组信息
   * @param {string} groupId - 群组ID
   * @param {Object} data - 更新数据
   * @param {string} data.name - 群组名称
   * @param {string} data.description - 群组描述
   * @param {string} data.avatar - 群组头像
   * @param {string} data.notice - 群公告
   */
  updateGroup(groupId, data) {
    return request.put(`/user/groups/${groupId}`, data)
  },

  /**
   * 解散群组
   * @param {string} groupId - 群组ID
   */
  dissolveGroup(groupId) {
    return request.delete(`/user/groups/${groupId}`)
  },

  /**
   * 申请加入群组
   * @param {string} groupId - 群组ID
   * @param {string} message - 申请消息
   */
  applyJoinGroup(groupId, message) {
    return request.post(`/user/groups/${groupId}/join`, { message })
  },

  /**
   * 邀请用户加入群组
   * @param {string} groupId - 群组ID
   * @param {Array} userIds - 用户ID列表
   * @param {string} message - 邀请消息
   */
  inviteUsers(groupId, userIds, message) {
    return request.post(`/user/groups/${groupId}/invite`, { userIds, message })
  },

  /**
   * 获取群组成员列表
   * @param {string} groupId - 群组ID
   * @param {Object} params - 查询参数
   * @param {string} params.role - 成员角色筛选
   * @param {string} params.keyword - 搜索关键词
   */
  getGroupMembers(groupId, params = {}) {
    return request.get(`/user/groups/${groupId}/members`, params)
  },

  /**
   * 设置成员角色
   * @param {string} groupId - 群组ID
   * @param {string} memberId - 成员ID
   * @param {string} role - 角色（owner/admin/member）
   */
  setMemberRole(groupId, memberId, role) {
    return request.put(`/user/groups/${groupId}/members/${memberId}/role`, { role })
  },

  /**
   * 踢出成员
   * @param {string} groupId - 群组ID
   * @param {string} memberId - 成员ID
   * @param {string} reason - 踢出原因
   */
  removeMember(groupId, memberId, reason) {
    return request.delete(`/user/groups/${groupId}/members/${memberId}`, { reason })
  },

  /**
   * 退出群组
   * @param {string} groupId - 群组ID
   */
  leaveGroup(groupId) {
    // 附带当前用户ID，便于后端鉴权
    let userId
    try {
      const userInfo = uni.getStorageSync('userInfo')
      userId = userInfo?.id || userInfo?.userId
    } catch (e) {}
    return request.post(`/user/groups/${groupId}/leave`, { userId })
  },

  /**
   * 转让群主
   * @param {string} groupId - 群组ID
   * @param {string} newOwnerId - 新群主ID
   */
  transferOwnership(groupId, newOwnerId) {
    return request.put(`/user/groups/${groupId}/transfer`, { newOwnerId })
  },

  /**
   * 设置群组免打扰
   * @param {string} groupId - 群组ID
   * @param {boolean} muted - 是否免打扰
   */
  muteGroup(groupId, muted = true) {
    return request.put(`/user/groups/${groupId}/mute`, { muted })
  },

  /**
   * 禁言成员
   * @param {string} groupId - 群组ID
   * @param {string} memberId - 成员ID
   * @param {number} duration - 禁言时长（分钟）
   */
  muteMember(groupId, memberId, duration) {
    return request.put(`/user/groups/${groupId}/members/${memberId}/mute`, { duration })
  },

  /**
   * 取消禁言
   * @param {string} groupId - 群组ID
   * @param {string} memberId - 成员ID
   */
  unmuteMember(groupId, memberId) {
    return request.put(`/user/groups/${groupId}/members/${memberId}/unmute`)
  },

  /**
   * 全员禁言
   * @param {string} groupId - 群组ID
   * @param {boolean} muteAll - 是否全员禁言
   */
  muteAllMembers(groupId, muteAll = true) {
    return request.put(`/user/groups/${groupId}/mute-all`, { muteAll })
  },

  /**
   * 获取群组申请列表
   * @param {string} groupId - 群组ID
   * @param {Object} params - 查询参数
   */
  getGroupApplications(groupId, params = {}) {
    return request.get(`/user/groups/${groupId}/applications`, params)
  },

  /**
   * 处理群组申请
   * @param {string} groupId - 群组ID
   * @param {string} applicationId - 申请ID
   * @param {string} action - 操作（approve/reject）
   * @param {string} message - 回复消息
   */
  handleGroupApplication(groupId, applicationId, action, message) {
    return request.put(`/user/groups/${groupId}/applications/${applicationId}`, { action, message })
  },

  /**
   * 设置群组公告
   * @param {string} groupId - 群组ID
   * @param {string} notice - 公告内容
   */
  setGroupNotice(groupId, notice) {
    return request.put(`/user/groups/${groupId}/notice`, { notice })
  },

  /**
   * 获取群组公告
   * @param {string} groupId - 群组ID
   */
  getGroupNotice(groupId) {
    return request.get(`/user/groups/${groupId}/notice`)
  },

  /**
   * 上传群组头像
   * @param {string} groupId - 群组ID
   * @param {string} filePath - 文件路径
   */
  uploadGroupAvatar(groupId, filePath) {
    return request.upload(`/user/groups/${groupId}/avatar`, filePath, {
      name: 'avatar',
      showProgress: true
    })
  },

  /**
   * 获取群组统计信息
   * @param {string} groupId - 群组ID
   */
  getGroupStats(groupId) {
    return request.get(`/user/groups/${groupId}/stats`)
  }
}

export default groupApi